package com.chenhao.springcloud.chenhaodatastructureservice.sort;

/**
 * Description:选择排序（每次取剩余数据最小的，位置不会变）
 *
 * @author chenhao
 * @date 2020/12/3 10:57
 */
public class SelectionSort {
    private SelectionSort(){}

    /**
     * 选择排序 实现了Comparable代表这个是可以比较的
     * @param arr
     */
    public static <E extends  Comparable<E>> void  sort(E[] arr){
        for (int i=0; i<arr.length;i++){
            //选择最小的
            int minTndex = i;
            for ( int j=i;j<arr.length;j++){
                if (arr[j].compareTo(arr[minTndex])<0){
                    minTndex = j;
                }
            }
            swap(arr,i,minTndex);
        }

    }

    /**
     * 交换数据
      * @param arr
     * @param i
     * @param j
     */
    private static <E> void swap(E[] arr,int i,int j){
        E t = arr[i];
        arr[i] =arr[j];
        arr[j] = t;
    }

    public static void main(String[] args) {
       // 泛型必须是一个类不能是基本数据类型
        Integer [] arr = {0,9,4,5,6,7,1};
        SelectionSort.sort(arr);
        for (int e:arr){
            System.out.println(e+" ");
        }

        Student[] students  = {new Student("Alice",98),new Student("Bobo",100)};
        SelectionSort.sort(students);
        for (Student e:students){
            System.out.println(e+" ");
        }
    }
}
